10295. Набор очков
Задан словарь из m слов,
каждому из которых поставлено в соответствие некоторое число. Имеются n
резюме, разделенные строкой из одного символа ‘.’. Необходимо найти в каждом
резюме все слова из словаря и просуммировать числа, соответствующие им.
Результирующая сумма – это оклад, который будет получать рабочий.
Вход.
Первая строка содержит два числа m и n (m £ 1000, n £ 100). Далее следует словарь из m
строк, каждая из которых содержит слово (до 16 символов нижнего регистра) и
соответствующую ему сумму денег (целое число от 0 до 1000000).
Выход. Для каждого резюме вычислить
оклад его обладателя.
7 2
administer 100000
spending 200000
manage 50000
responsibility 25000
expertise 100
skill 50
money 75000
the incumbent will administer the spending of kindergarden milk money
and exercise responsibility for making change he or she will share
responsibility for the task of managing the money with the assistant
whose skill and expertise shall ensure the successful spending exercise
.
this individual must have the skill to perform a heart transplant and
expertise in rocket science
.
Пример выхода
700150
150
обработка текста
Занесем словарь в структуру
данных map<string,int> voc. Читаем
слова из резюме и складываем соответствующие им числа из словря.
Во втором резюме из словаря
встречаются лишь слова expertise (стоимость 100) и skill (стоимость 50). Таким
образом, оклад обладателя второго резюме составит 150.
Объявим словарь voc. В символьный массив s читаем слова из резюме.
map<string,int> voc;
char s[20];
Читаем размер словаря m и количество резюме jobs. Читаем слова из словаря с их
стоимостями и заносим в словарь voc.
scanf("%d %d",&m,&jobs);
for(i = 0; i < m; i++)
{
scanf("%s
%d",s,&value);
voc[s] = value;
}
Обрабатываем jobs
резюме. В переменной value
накапливаем оклад рабочего. Для каждого прочитанного слова из резюме находим
его стоимость в словаре и прибавляем к value.
Если слово s отсутствует в словаре voc, то voc[s] = 0.
for(i = 0; i < jobs; i++)
{
value = 0;
while(scanf("%s",s),s[0]!='.') value += voc[s];
printf("%d\n",value);
}